home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / grafik / 3d & render tools / irit / contrib / scripts / anim_dnr.irt < prev    next >
Encoding:
Text File  |  1996-07-16  |  14.1 KB  |  444 lines

  1. #
  2. # A dinner table scene, to demonstrate the surface constructors of the IRIT
  3. # solid modeller. Do not attempt to run this model on an IBM PC...
  4. #
  5. #                    Gershon Elber, June 1991
  6. #
  7. # modification to dinner.ray:
  8. # fov 12
  9. # light 1 1 1 point 10 30 10
  10.  
  11. if ( machine == msdos, resolution = 5, resolution = 10 );
  12.  
  13. #
  14. # Control points for animation
  15. #
  16. Pt1 = CTLPT(E2,-0.6,-0.6); Pt2 = CTLPT(E2, 16.2,16.2);
  17. Pt3 = CTLPT(E2,-1.2,-1.2); Pt4 = CTLPT(E2, 15.6,15.6);
  18. Pt5 = CTLPT(E2,-1.8,-1.8); Pt6 = CTLPT(E2, 15.0,15.0);
  19. Pt7 = CTLPT(E2,-2.4,-2.4); Pt8 = CTLPT(E2, 14.4,14.4);
  20. Pt9 = CTLPT(E2,-3.0,-3.0); Pt10 = CTLPT(E2, 13.8,13.8);
  21. Pt11 = CTLPT(E2,-3.6,-3.6); Pt12 = CTLPT(E2, 13.2,13.2);
  22. Pt13 = CTLPT(E2,-4.2,-4.2); Pt14 = CTLPT(E2, 12.6,12.6);
  23. Pt15 = CTLPT(E2,-4.8,-4.8); Pt16 = CTLPT(E2, 12.0,12.0);
  24. Pt17 = CTLPT(E2,-5.4,-5.4); Pt18 = CTLPT(E2, 11.4,11.4);
  25. Pt19 = CTLPT(E2,-6.0,-6.0); Pt20 = CTLPT(E2, 10.8,10.8);
  26. Pt21 = CTLPT(E2,-6.6,-6.6); Pt22 = CTLPT(E2, 10.2,10.2);
  27. Pt23 = CTLPT(E2,-7.2,-7.2); Pt24 = CTLPT(E2, 9.6,9.6);
  28. Pt25 = CTLPT(E2,-7.8,-7.8); Pt26 = CTLPT(E2, 9.0,9.0);
  29. Pt27 = CTLPT(E2,-8.4,-8.4); Pt28 = CTLPT(E2, 8.4,8.4);
  30. Pt29 = CTLPT(E2,-9.0,-9.0); Pt30 = CTLPT(E2, 7.8,7.8);
  31. Pt31 = CTLPT(E2,-9.6,-9.6); Pt32 = CTLPT(E2, 7.2,7.2);
  32. Pt33 = CTLPT(E2,-10.2,-10.2); Pt34 = CTLPT(E2, 6.6,6.6);
  33. Pt35 = CTLPT(E2,-10.8,-10.8); Pt36 = CTLPT(E2, 6.0,6.0);
  34. Pt37 = CTLPT(E2,-11.4,-11.4); Pt38 = CTLPT(E2, 5.4,5.4);
  35. Pt39 = CTLPT(E2,-12.0,-12.0); Pt40 = CTLPT(E2, 4.8,4.8);
  36. Pt41 = CTLPT(E2,-12.6,-12.6); Pt42 = CTLPT(E2, 4.2,4.2);
  37. Pt43 = CTLPT(E2,-13.2,-13.2); Pt44 = CTLPT(E2, 3.6,3.6);
  38. Pt45 = CTLPT(E2,-13.8,-13.8); Pt46 = CTLPT(E2, 3.0,3.0);
  39. Pt47 = CTLPT(E2,-14.4,-14.4); Pt48 = CTLPT(E2, 2.4,2.4);
  40. Pt49 = CTLPT(E2,-15.0,-15.0); Pt50 = CTLPT(E2, 1.8,1.8);
  41. Pt51 = CTLPT(E2,-15.6,-15.6); Pt52 = CTLPT(E2, 1.2,1.2);
  42. Pt53 = CTLPT(E2,-16.2,-16.2); Pt54 = CTLPT(E2,0.6,0.6);
  43.  
  44. #
  45. # First model the floor...
  46. #
  47. v1 = vector( -4.0, -4.0, 0.0 );
  48. v2 = vector(  4.0, -4.0, 0.0 );
  49. v3 = vector(  4.0,  4.0, 0.0 );
  50. v4 = vector( -4.0,  4.0, 0.0 );
  51. base = poly( list( v1, v2, v3, v4 ), false );
  52. color( base, white );
  53. attrib( base, "texture", "marble" );
  54. attrib( base, "reflect", "0.6" );
  55. attrib( base, "rgb", "100,0,0" );
  56.  
  57. #
  58. # Model the table:
  59. #
  60.  
  61. cross = ctlpt( E3, 0.0001, 0.0, 1.0 ) +
  62.         ctlpt( E3, 1.0,    0.0, 1.0 ) +
  63.         ctlpt( E3, 1.0,    0.0, 0.95 ) +
  64.     cbspline( 3,
  65.           list( ctlpt( E3, 0.1, 0.0, 0.95 ),
  66.             ctlpt( E3, 0.1, 0.0, 0.9 ),
  67.             ctlpt( E3, 0.1, 0.0, 0.7 ),
  68.             ctlpt( E3, 0.2, 0.0, 0.6 ),
  69.             ctlpt( E3, 0.2, 0.0, 0.2 ),
  70.             ctlpt( E3, 0.4, 0.0, 0.05 ),
  71.             ctlpt( E3, 0.4, 0.0, 0.0 ) ),
  72.           list( KV_OPEN ) ) +
  73.     ctlpt( E3, 0.0001, 0.0, 0.0 );
  74. table = surfrev( cross );
  75. color( table, yellow );
  76. attrib( table, "resolution", 2 );
  77. attrib( table, "texture", "wood" );
  78. attrib( table, "reflect","0.6" );
  79. attrib( table, "rgb", "244,164,96" );
  80. VISIBLE = CBEZIER( list(Pt1,Pt2));
  81. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  82. attrib( table, "animation", list(VISIBLE));
  83. free(VISIBLE);
  84.  
  85. #
  86. # Make the two chairs.
  87. #
  88. base1 = sweepsrf( circle( vector( 0.0, 0.0, 0.0 ), 0.02 ),
  89.           cbspline( 3,
  90.                 list( ctlpt( E3, 0.5,   0.2, 0.5 ),
  91.                   ctlpt( E3, 0.5,   0.2, 0.07 ),
  92.                   ctlpt( E3, 0.5,   0.2, 0.015 ),
  93.                   ctlpt( E3, 0.43,  0.2, 0.015 ),
  94.                   ctlpt( E3, 0.25,  0.2, 0.1 ),
  95.                   ctlpt( E3, 0.07,  0.2, 0.015 ),
  96.                   ctlpt( E3, 0.0,   0.2, 0.015 ),
  97.                   ctlpt( E3, 0.0,   0.2, 0.07 ),
  98.                   ctlpt( E3, 0.0,   0.2, 0.5 ) ),
  99.                 list( KV_OPEN ) ),
  100.           off );
  101. color( base1, white );
  102. attrib( base1, "reflect", 0.9 );
  103. base2 = base1 * trans( vector( 0.0, -0.4, 0.0 ) );
  104.  
  105. swpcrv = cbspline( 3,
  106.            list( ctlpt( E3,  0.6, 0.0, 0.5 ),
  107.              ctlpt( E3,  0.3, 0.0, 0.6 ),
  108.              ctlpt( E3,  0.0, 0.0, 0.5 ),
  109.              ctlpt( E3, -0.1, 0.0, 0.5 ),
  110.              ctlpt( E3, -0.1, 0.0, 0.6 ),
  111.              ctlpt( E3,  0.0, 0.0, 0.9 ),
  112.              ctlpt( E3, -0.1, 0.0, 1.2 ) ),
  113.            list( KV_OPEN ) );
  114. swpcrv = crefine( swpcrv, false, list( 0.01, 0.1, 0.2, 0.3, 4.7, 4.8, 4.9, 4.99 ) );
  115.  
  116. cross = arc( vector(  0.25,  0.05,  0.0 ),
  117.          vector(  0.25,  0.0,   0.0 ),
  118.          vector(  0.3,   0.0,   0.0 ) ) +
  119.     arc( vector(  0.3,   0.0,   0.0 ),
  120.          vector(  0.25,  0.0,   0.0 ),
  121.          vector(  0.25, -0.05,  0.0 ) ) +
  122.     arc( vector( -0.25, -0.05,  0.0 ),
  123.          vector( -0.25,  0.0,   0.0 ),
  124.          vector( -0.3,   0.0,   0.0 ) ) +
  125.     arc( vector( -0.3,   0.0,   0.0 ),
  126.          vector( -0.25,  0.0,   0.0 ),
  127.          vector( -0.25,  0.05,  0.0 ) ) +
  128.     ctlpt( E3, 0.25, 0.05, 0.0 );
  129.  
  130. coverMain = sweepsrf( cross * rotz( 90 ), swpcrv, off );
  131. color( coverMain, yellow );
  132. attrib( coverMain, "texture", "wood" );
  133. attrib( coverMain, "rgb", "244,164,96" );
  134.  
  135. c1 = cmesh(coverMain, ROW, 14);
  136. c2 = c1 * trans( vector( -0.018, 0.0, 0.06 ) );
  137. c3 = c2 * scale( vector( 0.0, 0.83, 0.0 ) ) *
  138.       trans( vector( -0.124, 0.0, 1.26 ) );
  139. coverTop = sFromCrvs( list( c1, c2, c3 ), 3 );
  140. color( coverTop, yellow );
  141. attrib( coverTop, "texture", "wood" );
  142. attrib( coverTop, "rgb", "244,164,96" );
  143.  
  144. c1 = cmesh(coverMain, ROW, 0);
  145. c2 = c1 * trans( vector( 0.06, 0.0, -0.02 ) );
  146. c3 = c2 * scale( vector( 0.0, 0.83, 0.0 ) ) *
  147.       trans( vector( 0.66, 0.0, 0.48 ) );
  148. coverBot = sFromCrvs( list( c1, c2, c3 ), 3 );
  149. color( coverBot, yellow );
  150. attrib( coverBot, "texture", "wood" );
  151. attrib( coverBot, "rgb", "244,164,96" );
  152.  
  153. cover = list( CoverMain, coverBot, CoverTop );
  154.  
  155. chair = list( cover, base1, base2 );
  156. chair1 = chair * trans( vector( -1.2, 0.0, 0.0 ) );
  157. chair2 = chair1 * rotz( 90 );
  158. chair3 = chair1 * rotz( 180 );
  159. chair4 = chair1 * rotz( 270 );
  160. VISIBLE = CBEZIER( list(Pt3,Pt4));
  161. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  162. attrib( chair1, "animation", list(VISIBLE));
  163. free(VISIBLE);
  164. VISIBLE = CBEZIER( list(Pt5,Pt6));
  165. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  166. attrib( chair2, "animation", list(VISIBLE));
  167. free(VISIBLE);
  168. VISIBLE = CBEZIER( list(Pt7,Pt8));
  169. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  170. attrib( chair3, "animation", list(VISIBLE));
  171. free(VISIBLE);
  172. VISIBLE = CBEZIER( list(Pt9,Pt10));
  173. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  174. attrib( chair4, "animation", list(VISIBLE));
  175. free(VISIBLE);
  176.  
  177. chairs = list( chair1, chair2, chair3, chair4 );
  178.  
  179. #
  180. # Create some dishes/cups.
  181. #
  182.  
  183. # Four Dishes.
  184. cross = cbspline( 3,
  185.           list( ctlpt( E3, 0.0001, 0.0, 0.003 ),
  186.             ctlpt( E3, 0.1,    0.0, 0.003 ),
  187.             ctlpt( E3, 0.12,   0.0, 0.0 ),
  188.             ctlpt( E3, 0.15,   0.0, 0.03 ),
  189.             ctlpt( E3, 0.15,   0.0, 0.04 ),
  190.             ctlpt( E3, 0.14,   0.0, 0.03 ),
  191.             ctlpt( E3, 0.12,   0.0, 0.013 ),
  192.             ctlpt( E3, 0.1,    0.0, 0.01 ),
  193.             ctlpt( E3, 0.0001, 0.0, 0.01 ) ),
  194.           list( KV_OPEN ) );
  195. dish = surfrev( cross );
  196. color( dish, white );
  197. attrib( dish, "reflect", "0.2" );
  198. dish1 = dish * trans( vector( 0.75, 0.0, 1.0 ) );
  199. dish2 = dish * trans( vector( -0.75, 0.0, 1.0 ) );
  200. dish3 = dish * trans( vector( 0.0, 0.75, 1.0 ) );
  201. dish4 = dish * trans( vector( 0.0, -0.75, 1.0 ) );
  202. VISIBLE = CBEZIER( list(Pt11,Pt12));
  203. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  204. attrib( dish1, "animation", list(VISIBLE));
  205. free(VISIBLE);
  206. VISIBLE = CBEZIER( list(Pt13,Pt14));
  207. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  208. attrib( dish2, "animation", list(VISIBLE));
  209. free(VISIBLE);
  210. VISIBLE = CBEZIER( list(Pt15,Pt16));
  211. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  212. attrib( dish3, "animation", list(VISIBLE));
  213. free(VISIBLE);
  214. VISIBLE = CBEZIER( list(Pt17,Pt18));
  215. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  216. attrib( dish4, "animation", list(VISIBLE));
  217. free(VISIBLE);
  218.  
  219. dishes = list( dish1, dish2, dish3, dish4 );
  220.  
  221. # Wine glasses.
  222. cross = cbspline( 3,
  223.           list( ctlpt( E3, 0.0001, 0.0, 0.002 ),
  224.               ctlpt( E3, 0.02,   0.0, 0.002 ),
  225.             ctlpt( E3, 0.022,  0.0, 0.0 ),
  226.             ctlpt( E3, 0.022,  0.0, 0.003 ),
  227.             ctlpt( E3, 0.003,  0.0, 0.003 ),
  228.             ctlpt( E3, 0.003,  0.0, 0.007 ),
  229.             ctlpt( E3, 0.004,  0.0, 0.03 ),
  230.             ctlpt( E3, 0.03,   0.0, 0.03 ),
  231.             ctlpt( E3, 0.04,   0.0, 0.04 ),
  232.             ctlpt( E3, 0.03,   0.0, 0.07 ),
  233.             ctlpt( E3, 0.028,  0.0, 0.07 ),
  234.             ctlpt( E3, 0.037,  0.0, 0.042 ),
  235.             ctlpt( E3, 0.031,  0.0, 0.032 ),
  236.             ctlpt( E3, 0.0001, 0.0, 0.032 ) ),
  237.         list( KV_OPEN ) );
  238. wglass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  239. color( wglass, white );
  240. attrib( wglass, "reflect", "0.2" );
  241. attrib( wglass, "transp", "0.95" );
  242. attrib( wglass, "index", "1.4" );
  243. wglass1 = wglass * trans( vector( 0.75, 0.2, 1.0 ) );
  244. wglass2 = wglass * trans( vector( -0.75, -0.2, 1.0 ) );
  245. wglass3 = wglass * trans( vector( -0.2, 0.75, 1.0 ) );
  246. wglass4 = wglass * trans( vector( 0.2, -0.75, 1.0 ) );
  247. VISIBLE = CBEZIER( list(Pt19,Pt20));
  248. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  249. attrib( wglass1, "animation", list(VISIBLE));
  250. free(VISIBLE);
  251. VISIBLE = CBEZIER( list(Pt21,Pt22));
  252. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  253. attrib( wglass2, "animation", list(VISIBLE));
  254. free(VISIBLE);
  255. VISIBLE = CBEZIER( list(Pt23,Pt24));
  256. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  257. attrib( wglass3, "animation", list(VISIBLE));
  258. free(VISIBLE);
  259. VISIBLE = CBEZIER( list(Pt25,Pt26));
  260. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  261. attrib( wglass4, "animation", list(VISIBLE));
  262. free(VISIBLE);
  263.  
  264. wglasses = list( wglass1, wglass2, wglass3, wglass4 );
  265.  
  266. # Regular glasses.
  267. cross = cbspline( 3,
  268.           list( ctlpt( E3, 0.0001, 0.0, 0.0 ),
  269.               ctlpt( E3, 0.02,   0.0, 0.0 ),
  270.             ctlpt( E3, 0.022,  0.0, 0.001 ),
  271.             ctlpt( E3, 0.022,  0.0, 0.003 ),
  272.             ctlpt( E3, 0.03,   0.0, 0.07 ),
  273.             ctlpt( E3, 0.03,   0.0, 0.072 ),
  274.             ctlpt( E3, 0.028,  0.0, 0.072 ),
  275.             ctlpt( E3, 0.028,  0.0, 0.07 ),
  276.             ctlpt( E3, 0.02,   0.0, 0.005 ),
  277.             ctlpt( E3, 0.018,  0.0, 0.005 ),
  278.             ctlpt( E3, 0.0001, 0.0, 0.005 ) ),
  279.           list( KV_OPEN ) );
  280. glass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  281. color( glass, white );
  282. attrib( glass, "reflect", "0.2" );
  283. attrib( glass, "transp", "0.95" );
  284. attrib( glass, "index", "1.4" );
  285. glass1 = glass * trans( vector( 0.75, -0.2, 1.0 ) );
  286. glass2 = glass * trans( vector( -0.75, 0.2, 1.0 ) );
  287. glass3 = glass * trans( vector( 0.2, 0.75, 1.0 ) );
  288. glass4 = glass * trans( vector( -0.2, -0.75, 1.0 ) );
  289. VISIBLE = CBEZIER( list(Pt27,Pt28));
  290. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  291. attrib( glass1, "animation", list(VISIBLE));
  292. free(VISIBLE);
  293. VISIBLE = CBEZIER( list(Pt29,Pt30));
  294. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  295. attrib( glass2, "animation", list(VISIBLE));
  296. free(VISIBLE);
  297. VISIBLE = CBEZIER( list(Pt31,Pt32));
  298. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  299. attrib( glass3, "animation", list(VISIBLE));
  300. free(VISIBLE);
  301. VISIBLE = CBEZIER( list(Pt33,Pt34));
  302. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  303. attrib( glass4, "animation", list(VISIBLE));
  304. free(VISIBLE);
  305.  
  306. glasses = list( glass1, glass2, glass3, glass4 );
  307.  
  308. # Napkins.
  309. cross = cbspline( 3,
  310.           list( ctlpt( E2, -0.018, 0.001 ),
  311.               ctlpt( E2,  0.018, 0.001 ),
  312.             ctlpt( E2,  0.019, 0.002 ),
  313.             ctlpt( E2,  0.018, 0.004 ),
  314.             ctlpt( E2, -0.018, 0.004 ),
  315.             ctlpt( E2, -0.019, 0.001 ) ),
  316.           list( KV_OPEN ) );
  317. cross = cross + -cross * scale( vector( 1, -1, 1 ) );
  318.  
  319. napkin = extrude( cross * scale( vector( 1.6, 1.6, 1.6 ) ),
  320.           vector( 0.02, 0.03, 0.2 ) );
  321. color( napkin, red );
  322. napkin1 = napkin * trans( vector( 0.75, -0.2, 1.0 ) );
  323. napkin2 = napkin1 * rotz( 90 );
  324. napkin3 = napkin1 * rotz( 180 );
  325. napkin4 = napkin1 * rotz( 270 );
  326. VISIBLE = CBEZIER( list(Pt35,Pt36));
  327. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  328. attrib( napkin1, "animation", list(VISIBLE));
  329. free(VISIBLE);
  330. VISIBLE = CBEZIER( list(Pt37,Pt38));
  331. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  332. attrib( napkin2, "animation", list(VISIBLE));
  333. free(VISIBLE);
  334. VISIBLE = CBEZIER( list(Pt39,Pt40));
  335. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  336. attrib( napkin3, "animation", list(VISIBLE));
  337. free(VISIBLE);
  338. VISIBLE = CBEZIER( list(Pt41,Pt42));
  339. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  340. attrib( napkin4, "animation", list(VISIBLE));
  341. free(VISIBLE);
  342.  
  343. napkins = list( napkin1, napkin2, napkin3, napkin4 );
  344.  
  345. # Big dish.
  346. cross = ctlpt( E3, 0.0001, 0.0, 0.003 ) +
  347.     cbspline( 3,
  348.           list(    ctlpt( E3, 0.15,   0.0, 0.003 ),
  349.             ctlpt( E3, 0.1,    0.0, 0.01 ),
  350.             ctlpt( E3, 0.1,    0.0, 0.035 ),
  351.             ctlpt( E3, 0.2,    0.0, 0.15 ),
  352.             ctlpt( E3, 0.195,  0.0, 0.15 ),
  353.             ctlpt( E3, 0.09,   0.0, 0.03 ),
  354.             ctlpt( E3, 0.04,   0.0, 0.01 ),
  355.             ctlpt( E3, 0.0001, 0.0, 0.01 ) ),
  356.           list( KV_OPEN ) );
  357. bigdish = surfrev( cross * scale( vector( 1.2, 1.2, 1.2 ) ) );
  358. bigdish = bigdish * trans( vector( 0.0, -0.2, 1.0 ) );
  359. color( bigdish, white );
  360. attrib( bigdish, "reflect", "0.2" );
  361. attrib( bigdish, "transp", "0.95" );
  362. attrib( bigdish, "index", "1.4" );
  363. VISIBLE = CBEZIER( list(Pt43,Pt44));
  364. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  365. attrib( bigdish, "animation", list(VISIBLE));
  366. free(VISIBLE);
  367.  
  368. alldishes = list( dishes, wglasses, glasses, napkins, bigdish );
  369.  
  370. #
  371. # Create some candles staff.
  372. #
  373. cross = cbspline( 3,
  374.           list( ctlpt( E3, 0.0001, 0.0, 0.0 ),
  375.             ctlpt( E3, 0.03,   0.0, 0.0 ),
  376.             ctlpt( E3, 0.035,   0.0, -0.001 ),
  377.             ctlpt( E3, 0.02,   0.0, 0.011 ),
  378.             ctlpt( E3, 0.015,  0.0, 0.011 ),
  379.             ctlpt( E3, 0.014,  0.0, 0.012 ),
  380.             ctlpt( E3, 0.014,  0.0, 0.02 ),
  381.             ctlpt( E3, 0.02,   0.0, 0.03 ) ),
  382.           list( KV_OPEN ) ) +
  383.     ctlpt( E3, 0.012,  0.0, 0.03 ) +
  384.     ctlpt( E3, 0.012,  0.0, 0.015 ) +
  385.     ctlpt( E3, 0.0001, 0.0, 0.015 );
  386.  
  387. cndlbase = surfrev( cross * scale( vector( 2, 2, 2 ) ) );
  388. color( cndlbase, white );
  389. attrib( cndlbase, "reflect", "0.2" );
  390. attrib( cndlbase, "transp", "0.95" );
  391. cndlbase1 = cndlbase * trans( vector( 0.2, 0.3, 1.0 ) );
  392. cndlbase2 = cndlbase * trans( vector( -0.2, 0.3, 1.0 ) );
  393. VISIBLE = CBEZIER( list(Pt45,Pt46));
  394. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  395. attrib( cndlbase1, "animation", list(VISIBLE));
  396. free(VISIBLE);
  397. VISIBLE = CBEZIER( list(Pt47,Pt48));
  398. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  399. attrib( cndlbase2, "animation", list(VISIBLE));
  400. free(VISIBLE);
  401.  
  402. cross = ctlpt( E3, 0.0001, 0.0, 0.015 ) +
  403.     cbspline( 3,
  404.           list(    ctlpt( E3, 0.011,  0.0, 0.015 ),
  405.             ctlpt( E3, 0.011,  0.0, 0.2 ),
  406.             ctlpt( E3, 0.003,  0.0, 0.3 ) ),
  407.           list( KV_OPEN ) );
  408. candle = surfrev( cross * scale( vector( 2, 2, 2 ) ) );
  409. color( candle, red );
  410. candle1 = candle * trans( vector( 0.2, 0.3, 1.0 ) );
  411. candle2 = candle * trans( vector( -0.2, 0.3, 1.0 ) );
  412. VISIBLE = CBEZIER( list(Pt49,Pt50));
  413. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  414. attrib( candle1, "animation", list(VISIBLE));
  415. free(VISIBLE);
  416. VISIBLE = CBEZIER( list(Pt51,Pt52));
  417. VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
  418. attrib( candle2, "animation", list(VISIBLE));
  419. free(VISIBLE);
  420.  
  421. candles = list( cndlbase1, cndlbase2, candle1, candle2 );
  422.  
  423. #
  424. # View it all and dump it.
  425. #
  426. #
  427. # Go to single buffer since this one is slow.
  428. #
  429. viewstate("DblBuffer");
  430.  
  431. save_mat = view_mat;
  432. view_mat = view_mat * scale( vector( 0.5, 0.5, 0.5 ) );
  433. dinner = list( base, table, chairs, alldishes, candles );
  434.  
  435. save( "dinner", dinner );
  436.  
  437. view_mat = save_mat;
  438. #view( list( view_mat ), on );
  439.  
  440.  
  441.  
  442.  
  443.  
  444.